#pragma once
#include "Structure.h"

namespace DL {
	Tensor3D<int8>& QConv2D(const Tensor3D<int8>& tensor, QATParams in, int stride, int padding, const Tensor4D<int8>& weight, const Tensor1D<float>& scale, const Tensor1D<float>& bias, QATParams out);
	Tensor3D<int8>& QMaxPooling2D(const Tensor3D<int8>& tensor, int size, int stride, int padding);
	Tensor3D<int8>& QRelu(const Tensor3D< int8>& tensor);
	Tensor1D<int8>& QRelu(const Tensor1D<int8>& tensor);
	Tensor1D<int8>& QFlatten(const Tensor3D<int8>& tensor);
	Tensor1D<int8>& QLinear(const Tensor1D<int8>& tensor, QATParams in, const Tensor2D<int8>& weight, const Tensor1D<float>& scale, const Tensor1D<float>& bias, QATParams out);
	Tensor1D<float>& Dequantify(const Tensor1D<int8>& tensor, QATParams qat);
	Tensor3D<int8>& Quantify(const Tensor3D<float>& tensor, QATParams qat);
	//Tensor3D<float>& QNormalize(const Tensor3D<float>& tensor, const float mean[], const float std[]);
}